package com.xiao.tripmateai.tools;

import com.xiao.tripmateai.service.TimeService;
import jakarta.annotation.Resource;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Primary;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 整合自己编写的工具，以及 mcp自带的工具到 combinedToolCallbackProvider 中
 * 之后在智能体中使用整合之后的工具
 */
@Configuration
public class ToolIntegrationConfig {

    // 自动注入 MCP 的提供者 mcpToolCallbacks 是spring ai框架中声明的名称
    @Resource
    @Qualifier("mcpToolCallbacks")
    ToolCallbackProvider toolCallbackProvider;

    @Bean
    @Primary // 标记为主要Bean，解决冲突
    @Lazy
    public ToolCallbackProvider combinedToolCallbackProvider(
        FileOperationTool fileOpTool,
        TimeService timeService,
        ResourceDownloadTool downloadTool,
        PDFGenerationTool pdfGenerationTool,
        TerminateTool terminateTool


    ) {
        // 1. 创建自定义工具的提供者
        ToolCallbackProvider customProvider = MethodToolCallbackProvider.builder()
            .toolObjects(fileOpTool, timeService, downloadTool, pdfGenerationTool, terminateTool)
            .build();

        // 2. 创建合并提供者
        return () -> {
            List<ToolCallback> allCallbacks = new ArrayList<>();

            // 添加高德MCP工具
            if (toolCallbackProvider != null) {
                allCallbacks.addAll(Arrays.asList(toolCallbackProvider.getToolCallbacks()));
            }

            // 添加自定义工具
            allCallbacks.addAll(Arrays.asList(customProvider.getToolCallbacks()));

            return allCallbacks.toArray(new ToolCallback[0]);
        };
    }
}